using System;
using System.Windows.Forms;
using App.Git.Vista.Widgets;
using App.Modelo.Interfaces;

namespace App.SolInf.Vista.Listado
{
    public class GenericListado<T> : ListadoBusquedaGenerico 
        where T : new()
    {
       
        private Type Model;
        
        private T _cliente;
        public IRepositorio Session;

    
        public GenericListado()
        {
            ContenedorModulo = ModuloSolInf.Instance;

            Model = typeof (T);

            Text = Model.Name;


            AddColumn("Id", "Id", 100);
            AddColumn("Descripcion", "Descripcion", 500);

            var BtnModificar = new ToolStripButton() { Text = "Ver/Modificar" };
            BtnModificar.Click += new EventHandler(BtnModificar_Click);

            Controles.Add(BtnModificar);

            //SearchControls.Add(ControlBusqueda);

            PerformSearch += new EventHandler(PerformSearchBuscarCliente);
            this.Cancelar += new System.EventHandler(this.ListadoCliente_Cancelar);
            this.ItemSelected += new System.EventHandler<ListadoBusquedaItemEventArgs>(this.ListadoCliente_ItemSelected);


        }

        void BtnModificar_Click(object sender, EventArgs e)
        {
            if (ItemSeleccionado != null)
            {
                var form = new GenericEditForm<T>(){ Session =  Session };

                form.Item = (T)ItemSeleccionado;
                form.Modificar();
            }

        }

        public T BuscarItem()
        {
            PerformSearch += new EventHandler(PerformSearchBuscarCliente);

            this.ShowDialog();
            return _cliente;
        }

        private void ListadoCliente_ItemSelected(object sender, ListadoBusquedaItemEventArgs e)
        {
            _cliente = (T)e.ItemSeleccionado;
            Hide();
        }

        private void ListadoCliente_Cancelar(object sender, EventArgs e)
        {
            _cliente = default(T);
            Hide();
        }

        private void PerformSearchBuscarCliente(object sender, EventArgs e)
        {
            DataSource = Session.GetAll<T>();
        }


        public virtual void Modificar()
        {
            ModuloSolInf.Instance.AbrirFormulario(this);
        }

        public virtual void Ver()
        {
            ModuloSolInf.Instance.AbrirFormulario(this);
        }
    }
}